/**
 * Copyright &copy; 2013-2015 山东易科德软件有限公司   All rights reserved.
 */
package cn.net.ecode.modules.sys.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.net.ecode.common.service.TreeService;
import cn.net.ecode.common.utils.CacheUtils;
import cn.net.ecode.modules.sys.dao.MenuDao;
import cn.net.ecode.modules.sys.entity.Menu;
import cn.net.ecode.modules.sys.security.AuthorizingRealm;
import cn.net.ecode.modules.sys.utils.LogUtils;
import cn.net.ecode.modules.sys.utils.UserUtils;

/**
 * 菜单管理Service
 * 
 * @author ThinkGem
 * @version 2014-8-19
 */
@Service
@Transactional(readOnly = true)
public class MenuService extends TreeService<MenuDao, Menu> {

	@Autowired
	private AuthorizingRealm authorizingRealm;
	
	/**
	 * 获取菜单
	 */
	public Menu get(String menuCode) {
		return super.get(menuCode);
	}
	
	/**
	 * 查询菜单列表
	 */
	public List<Menu> findList(Menu menu) {
		return super.findList(menu);
	}

	/**
	 * 根据用户id获取菜单列表
	 * @param menu
	 * @return
	 */
	public List<Menu> findByUserCode(Menu menu) {
		return dao.findByUserCode(menu);
	}

	/**
	 * 新增/修改，清空缓存
	 */
	@Override
	@Transactional(readOnly = false)
	public void save(Menu entity) {
		super.save(entity);
		// 清除用户菜单缓存
		UserUtils.removeCache(UserUtils.CACHE_MENU_LIST);
		// 清除权限缓存
		authorizingRealm.clearAllCachedAuthorizationInfo();
		// 清除日志相关缓存
		CacheUtils.remove(LogUtils.CACHE_MENU_NAME_PATH_MAP);
	}

	/**
	 * 修改菜单的排序
	 * @param menu 菜单
	 * @return
	 */
	@Transactional(readOnly = false)
	public int updateSorts(Menu menu) {
		int columns = dao.updateSorts(menu);
		// 清除用户菜单缓存
		UserUtils.removeCache(UserUtils.CACHE_MENU_LIST);
		// 清除权限缓存
		authorizingRealm.clearAllCachedAuthorizationInfo();
		// 清除日志相关缓存
		CacheUtils.remove(LogUtils.CACHE_MENU_NAME_PATH_MAP);
		return columns;
	}
	
	/**
	 * 删除，清空缓存
	 */
	@Override
	@Transactional(readOnly = false)
	public void delete(Menu entity) {
		super.delete(entity);
		// 清除用户菜单缓存
		UserUtils.removeCache(UserUtils.CACHE_MENU_LIST);
		// 清除权限缓存
		authorizingRealm.clearAllCachedAuthorizationInfo();
		// 清除日志相关缓存
		CacheUtils.remove(LogUtils.CACHE_MENU_NAME_PATH_MAP);
	}

}